package com.zijidelu.luframework.utils.io;

import java.net.URL;
import java.nio.file.Path;
import java.util.Objects;

/**
 * 路径工具类
 *
 * @author ZIJIDELU
 * @datetime 2025/10/24 16:16
 */
public class PathUtil {
    /**
     * 计算绝对路径
     *
     * @param packageName 包名
     * @param fileName    文件名
     * @return 绝对路径
     */
    public static String calcAbsolutePath(String packageName, String fileName) {
        ClassLoader classLoader = PathUtil.class.getClassLoader();
        URL resource = Objects.requireNonNull(classLoader.getResource(""));
        Path path = Path.of(
                resource.getFile().replace("target/classes", "src/main/java"),
                packageName.replace('.', '/'),
                fileName
        );

        return path.toString();
    }

    /**
     * 计算Java文件的绝对路径
     *
     * @param clazz 类
     * @return 绝对路径
     */
    public static Path calcJavaFileAbsolutePath(Class<?> clazz) {
        return Path.of(calcAbsolutePath(clazz.getPackage().getName(), clazz.getSimpleName() + ".java"));
    }

    /**
     * 从类加载器中获取类文件的真实路径
     *
     * @param targetClass 目标类
     * @return 类文件真实路径
     */
    public static Path calcClassRealPath(Class<?> targetClass) {
        String classFilePath = targetClass.getResource(targetClass.getSimpleName() + ".class").getPath();
        return Path.of(classFilePath.replace("target/classes", "src/main/java"));
    }

}
